\documentclass[a4paper,12pt]{article}

\usepackage{fancyhdr}
% \usepackage{ulem}     % do podkreśleń, skreśleń (psuł wygląd tagu \emph)
\usepackage[utf8]{inputenc}
\usepackage{polski}
\usepackage[polish]{babel}
\usepackage{a4wide}

\pagestyle{fancy}

\renewcommand{\headheight}{16pt}

\newcommand{\HRule}{\rule{\linewidth}{0.1mm}}

\begin{document}

\begin{titlepage}
\begin{center}
	\textsc{Inżynieria oprogramowania - Grupa dra inż. Leszka Grocholskiego}\\
	\textsc{II UWr 2009/2010}\\[4cm]

	\HRule \\[2cm]

	Aleksandra Kloc, Adam Grycner, Mateusz Łyczek\\[1cm]

	\textsc{\Large Wasza-fota.pl}\\[0.3cm]
	\textsc{\large Specyfikacja wymagań}\\[2cm]

	\HRule\\[2.5cm]
	
\begin{center}
\textbf{Historia zmian tego dokumentu}
\end{center}
\begin{table}[h]
	\begin{center}
	{\footnotesize
	\begin{tabular}{|l|c|p{2.8cm}|l|}
		\hline
		\textbf{Data} & \textbf{Wersja} & \textbf{Autor} & \textbf{Opis zmian}\\
		\hline
		2009/11/5 & 1.0 & Zespół & Utworzenie dokumentu\\
		2009/11/6 & 1.1 & Aleksandra Kloc & Przegląd przypadków użycia, przegląd aktorów\\
		2009/11/9 & 1.2 & Mateusz Łyczek & Dokumentacja użytkownika, stosowane standardy\\
		& & & Wymagania licencyjne, prawo autorskie\\
		\hline
	\end{tabular}
	}
	\end{center}
	\caption{Historia zmian}
\end{table}
	
	
\end{center}
\end{titlepage}

\tableofcontents
\newpage

\section{Wstęp}
\subsection{Cel}
Celem niniejszego dokumentu jest sporządzenie dokładnej specyfikacji wymagań stawianych aplikacji \emph{wasza-fota.pl},
szczegółowe określenie poszczególnych przypadków użycia i specyficznych dla nich scenariuszy.%, a także zaprojektowanie
% poszczególnych interfejsów.

% \subsection{Zakres}
% Dokument ten obejmuje wszystkie najważniejsze części tworzonego systemu. Duży nacisk położony jest na przegląd przypadków
% użycia. % oraz wymagania stawiane aplikacji. Zawiera też projekty poszczególnych interfejsów.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Przegląd modelu przypadków użycia}
Projekty ekranów odpowiadające przedstawionym niżej i opisanym szczegółowo niektórym przypadkom użycia znajdują się w dokumencie
\emph{Projekt interfejsu użytkownika}.

\subsection{Obsługa użytkownika}
\subsubsection{Rejestracja}
\textbf{Cel:} Gość chce założyć konto w portalu WASZA-FOTA.PL\\
\textbf{Scenariusz główny:}
\begin{enumerate}
	\item Gość znajduje się na głównej stronie portalu.
	\item Gość naciska przycisk ``Zarejestruj'' (pod którym kryje się link do podstrony odpowiedzialnej za rejestrowanie gości).
	\item System wyświetla odpowiedni formularz.
% 	\item Gość wybiera rodzaj tworzonego konta (fotograf lub klient).
	\item Gość wypełnia pola oznaczone jako obowiązkowe
% 		(login, hasło, potwierdzenie hasła, adres e-mail, miasto)
		oraz według uznania pola oznaczone jako nieobowiązkowe %(imię, nazwisko, płeć, wiek).
	\item Gość naciska przycisk ``Dodaj''.
	\item System pobiera dane z formularza i sprawdza ich poprawność.
	\item System wyświetlając odpowiedni komunikat potwierdza dokonaną rejestrację, wysyła na podany adres e-mail link
		aktywujący konto i informuje gościa o tym.
	\item Gość odbiera wiadomość od systemu, zgodnie z instrukcją wchodzi na kryjącą się pod linkiem stronę internetową
		i aktywuje nowo założone konto.
	\item Po aktywacji Gość staje się użytkownikiem portalu.
\end{enumerate}
Scenariusze alternatywne:
\begin{itemize}
	\item \emph{Problem}: Dane w kroku 4 zostały źle wprowadzone, np: niewypełnione obowiązkowe pole, w systemie istnieje już
		użytkownik o podanym loginie lub adresie e-mail, hasło różne od potwierdzenia lub krótsze niż 5 znaków.\\
		\emph{Rozwiązanie}: System wyświetla informacje o błędzie obok odpowiednich pól, umożliwiając poprawienie danych
		(zawartość pól wypełnionych poprawnie nie jest usuwana).
	\item \emph{Problem}: Gość nie aktywował konta (nie odebrał wiadomości z linkiem lub nie kliknął na niego).\\
		\emph{Rozwiązanie}: Jeśli po 24 godzinach po rejestracji gość nie aktywował konta, to system usuwa je i wysyła
			odpowiednią wiadomość na podany przez gościa adres e-mail.
\end{itemize}

\subsubsection{Zmiana profilu}
\textbf{Cel:} Użytkownik chce zmienić swoje dane zapisane w systemie\\
Scenariusz główny:
\begin{enumerate}
	\item Użytkownik znajduje się na dowolnej podstronie portalu.
	\item Naciska przycisk ''Profil`` (pod którym kryje się link do podstrony zawierającej szczegóły dotyczące profilu
		użytkownika).
	\item System wyświetla odpowiedni formularz.
	\item Użytkownik wprowadza zmiany w polach %: hasło, potwierdzenie hasła, adres e-mail, miasto, imię i nazwisko, płeć,
		a następnie naciska przycisk ''Zapisz``.
	\item System pobiera dane z formularza i sprawdza ich poprawność.
	\item System potwierdza zmiany dokonane w profilu.
\end{enumerate}
Scenariusze alternatywne:
\begin{itemize}
	\item \emph{Problem}: Nowe dane w kroku 4 zostały źle wprowadzone, np: niewypełnione obowiązkowe pole,
		w systemie istnieje już użytkownik o podanym loginie lub adresie e-mail, hasło różne od potwierdzenia
		lub krótsze niż 5 znaków.\\
		\emph{Rozwiązanie}: System wyświetla informacje o błędzie obok odpowiednich pól, umożliwiając poprawienie danych
			(zawartość pól wypełnionych poprawnie nie jest usuwana).
	\item \emph{Problem}: Użytkownik zmienił dotychczasowy adres e-mail\\
		\emph{Rozwiązanie}: System wysyła link aktywacyjny na nowo podany adres e-mail i wymaga ponownej aktywacji
		konta (w celu potwierdzenia zmiany adresu e-mail w profilu). Do czasu aktywacji system korzysta ze starego
		adresu e-mail. W razie braku aktywacji nowego adresu e-mail (w ciągu 24 godzin od wprowadzonych zmian) system
		wraca do poprzednich ustawień i informuje użytkownika o tym zajściu wysyłając wiadomości na oba adresy e-mailowe.
\end{itemize}

\subsubsection{Logowanie}
\textbf{Cel:} Użytkownik chce zalogować się w systemie\\
Scenariusz główny:
\begin{enumerate}
	\item Użytkownik znajduje się na dowolnej podstronie portalu.
	\item Naciska przycisk ''Zaloguj`` (pod którym kryje się link do podstrony umożliwiającej procedurę logowania).
	\item System wyświetla odpowiedni formularz.
	\item Użytkownik wprowadza w odpowiednie pola login i hasło.
	\item Użytkownik potwierdza wprowadzone dane naciskając przycisk ''Zaloguj`` lub naciskając na klawiaturze klawisz
		''Enter``.
	\item System pobiera dane z formularza i sprawdza ich poprawność.
	\item System wyświetla odpowiednią stronę główną zalogowanego użytkownika w zależności od rodzaju konta.
\end{enumerate}
Scenariusze alternatywne:
\begin{enumerate}
	\item \emph{Problem}: Użytkownik podał niepoprawne hasło lub login.\\
		\emph{Rozwiązanie}: System ponownie wyświetla formularz logowania z dodatkowym komunikatem o wprowadzeniu
			niepoprawnych danych.
	\item \emph{Problem}: Użytkownik nie podał loginu lub hasła.\\
		\emph{Rozwiązanie}: System ponownie wyświetla formularz logowania z dodatkowym komunikatem o brakujących danych.
\end{enumerate}

\subsubsection{Wylogowanie}
\textbf{Cel:} Użytkownik chce wylogować się z systemu\\
Scenariusz główny:
\begin{enumerate}
	\item Użytkownik znajduje się na dowolnej podstronie portalu.
	\item Naciska przycisk ''Wyloguj``.
	\item System potwierdza wylogowanie użytkownika z systemu poprzez przekierowanie na stronę główną i wyświetlenie na
		niej odpowiedniego komunikatu.
\end{enumerate}
Scenariusze alternatywne: brak

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Obsług fotografa}

\subsubsection{Edycja cen usług}
\textbf{Cel:} Fotograf chce ustalić swój cennik usług\\
Scenariusz główny:
\begin{enumerate}
	\item Fotograf znajduje się na dowolnej podstronie panelu fotografa.
	\item Naciska przycisk ''Cennik`` (pod którym kryje się link do podstrony odpowiedzialnej za edytowanie cennika).
	\item System wyświetla odpowiedni formularz.
% 	\item Fotograf wpisuje w odpowiednie pola lub dopisuje do już istniejących wpisów pary: usługa i cena usługi.
% 	\item Fotograf wpisuje w odpowiednie pola lub dopisuje do już istniejących wpisów swoje uwagi do cennika, takie jak:
% 		komentarze, dodatkowe wyjaśnienia, aktualne promocje).
	\item Fotograf wpisuje ceny w odpowiednie pola i znaznacza odpowiednie pary: rozmiar odbitek i rodzaj papieru, których ceny dotyczą.
	\item Fotograf wpisuje o ile droższe są odbitki z danym efektem w odpowiednie pola.
	\item Fotograf naciska przycisk ''Zatwierdź``.
	\item System pobiera dane z formularza i sprawdza ich poprawność oraz zapisuje w bazie danych dokonane zmiany.
	\item System wyświetlając odpowiedni komunikat potwierdza dokonaną zmianę w cenniku, wysyła na podany przez fotografa
		adres e-mail informacje o dokonanej zmianie w cenniku.
\end{enumerate}
Scenariusze alternatywne:
\begin{enumerate}
	\item \emph{Problem}: Dane w krokach 4. i 5. zostały źle wprowadzone, np: ceny usług nie są zapisane w systemie dziesiątkowym
		z dokładnością do dwóch miejsc po przecinku.\\
		\emph{Rozwiązanie}: System wyświetla informacje o błędzie obok odpowiednich pól, umożliwiając poprawienie danych
			(zawartość pól wypełnionych poprawnie nie jest usuwana).
\end{enumerate}

\subsubsection{Zamówienie pakietu}
\textbf{Cel:} Fotograf chce wykupić nowy pakiet\\
Scenariusz główny:
\begin{enumerate}
	\item Fotograf znajduje się na dowolnej podstronie panelu fotografa.
	\item Naciska przycisk ''Pakiety`` (pod którym kryje się link do podstrony umożliwiającej zarządzanie pakietami).
	\item System wyświetla dostępne oferty pakietów (różniące się ceną, rozmiarem, terminem ważności).
% 	\item Fotograf zaznacza pakiety, które chce nabyć określając ilość egzemplarzy każdego z nich. System aktualizuje
% 		wyświetlaną kwotę zamówienia przy każdej jego modyfikacji w trakcie tworzenia.
% 	\item Fotograf potwierdza wprowadzone dane naciskając przycisk ''Kupuję``.
% 	\item System pobiera dane z formularza i sprawdza ich poprawność.
	\item Fotograf wybiera pakiet z oferty i klika na odpowiadający mu przycisk ''Zamów``.
	\item System zapisuje dokonane zamówienie w bazie jako oczekujące na potwierdzenie zapłaty.
	\item System wyświetla komunikat o konieczności dokonania wpłaty, w ciągu 7 dni roboczych, podając konieczne dane
		do przelewu i wysyła je na adres e-mail fotografa.
	\item System w polu nowe zamówienia w panelu administratora umieszcza szczegółową informację o dokonanym przez
		fotografa zamówieniu.
	\item Administrator otrzymuje z banku potwierdzenie wykonania przelewu przez fotografa i dokonuje akceptacji danego zakupu.
	\item System zapisuje w bazie danych informację o przydzieleniu fotografowi odpowiedniej przestrzeni dyskowej na serwerze.
	\item System wysyła wiadomość e-mail do dokonującego zamówienia fotografa informując w nim o potwierdzeniu dokonania
		zakupu.
\end{enumerate}
Scenariusze alternatywne:
\begin{enumerate}
% 	\item \emph{Problem}: Fotograf nacisnął przycisk ''Zamów`` bez wcześniejszego wyboru pakietu.\\
% 		\emph{Rozwiązanie}: System ponownie wyświetla oferty pakietów z dodatkowym komunikatem o wprowadzeniu
% 			niepoprawnych danych i niepowodzeniu zakupu.
	\item \emph{Problem}: Fotograf nie dokonał przelewu w ciągu 7 dni roboczych.\\
		\emph{Rozwiązanie}: Jeśli po 7 dniach roboczych po dokonaniu zamówienia system nie otrzymał potwierdzenia
			zapłaty, to system usuwa z bazy zamówienie i wysyła odpowiednią wiadomość na podany przez fotografa
			adres e-mail.
\end{enumerate}

\subsubsection{Utworzenie galerii}
\textbf{Cel:} Fotograf chce utworzyć nową galerię\\
Scenariusz główny:
\begin{enumerate}
	\item Fotograf znajduje się na dowolnej podstronie panelu fotografa.
	\item Naciska przycisk ''Galerie`` (pod którym kryje się link do podstrony umożliwiającej zarządzanie galeriami).
	\item System wyświetla odpowiedni formularz.
	\item Fotograf wprowadza w odpowiednie pola datę i nazwę imprezy oraz wybiera jedną z opcji widoczności galerii.
		Jeśli fotograf wybrał galerię prywatną, to wymagane jest ustalenie hasła dostępu do galerii dla użytkowników i
		jego powtórzenie (system wyświetla odpowiedni komunikat i rozszerza formularz o dodatkowe pola dla haseł).
% 	\item Jeśli fotograf chce dodać zdjęcia do tworzonej galerii, to naciska przycisk ''Dodaj zdjęcia - przeglądaj pliki``,
% 		który pozwala mu na przeglądanie plików, następnie wybiera odpowiedni plik \verb+zip+ zawierający zdjęcia i
% 		naciskając przycisk otwórz dodaje je do galerii.
	\item Fotograf klika przycisk ''Wybierz`` i wskazuje plik \verb+zip+ zawierający zdjęcia do umieszczenia w galerii.
	\item System przed dodaniem zdjęć do galerii sprawdza czy spełniają one odpowiednie warunki, tzn. czy jest wystarczająca
		dużo miejsce w pakiecie, czy rozmiar zdjęć nie jest za duży, czy ilość zdjęć w pakiecie nie przekroczy
		maksymalnej wartości.
	\item Jeśli dodany plik ze zdjęciami nie spełnia narzuconych warunków, to system wyświetla odpowiedni komunikat i wymaga
		dokonania zmiany w wyborze pliku.
	\item Fotograf naciska przycisk ''Utwórz galerię``.
	\item System pobiera dane z formularza, sprawdza ich poprawność, tworzy nową galerię, wyświetla w panelu fotografa
		komunikat oraz wysyła wiadomość e-mail do fotografa informującą o utworzeniu przez niego nowej galerii.
\end{enumerate}
Scenariusze alternatywne:
\begin{enumerate}
	\item \emph{Problem}: Dane w formularzu zostały źle wprowadzone, np: niewypełnione obowiązkowe pole, w systemie
		istnieje już galeria o podanej nazwie i dacie utworzona przez danego fotografa, hasło dostępu do prywatnej
		galerii jest różne od jego potwierdzenia lub krótsze niż 5 znaków.\\
		\emph{Rozwiązanie}: System wyświetla informacje o błędzie obok odpowiednich pól, umożliwiając poprawienie
			danych (zawartość pól wypełnionych poprawnie nie jest usuwana).
\end{enumerate}

\subsubsection{Dodanie zdjęć do galerii}
\textbf{Cel:} Fotograf chce dodać dodatkowe zdjęcia do galerii\\
Scenariusz główny:
\begin{enumerate}
	\item Fotograf znajduje się na dowolnej podstronie panelu fotografa.
	\item Naciska przycisk ''Galerie`` (pod którym kryje się link do podstrony umożliwiającej zarządzanie galeriami).
	\item Fotograf wybiera z listy galerię do której chce dodać zdjęcia.
	\item System wyświetla odpowiedni formularz.
	\item Fotograf w części zatytułowanej ''Dodaj nowe zdjęcia`` wskazuje zdjęcia, które mają być dodane do galerii.
% 	\item Fotograf naciska przycisk ''Dodaj zdjęcia - przeglądaj pliki``, który pozwala mu na przeglądanie plików, następnie
% 		wybiera odpowiedni plik \verb+zip+ zawierający zdjęcia i naciskając przycisk otwórz, który dodaje plik do galerii.
	\item System przed dodaniem zdjęć do galerii sprawdza czy spełniają one odpowiednie warunki, tzn. czy jest wystarczająco
		dużo miejsca w pakiecie, czy rozmiar zdjęć nie jest za duży, czy ilość zdjęć w pakiecie nie przekroczy maksymalnej
		wartości.
	\item Jeśli dodane zdjęcia nie spełniają narzuconych warunków, to system wyświetla odpowiedni komunikat i wymaga
		dokonania zmiany w wyborze plików.
	\item Fotograf naciska przycisk ''Wyślij zdjęcie``.
	\item System pobiera dane z formularza, sprawdza ich poprawność, zapisuje w bazie danych informację o nowo dodanych zdjęciach.
	\item System wyświetla w panelu fotografa komunikat oraz wysyła wiadomość e-mail do fotografa informującą go o dodaniu
		przez niego nowych zdjęć do danej galerii.
\end{enumerate}
Scenariusze alternatywne: brak

\subsubsection{Modyfikacja ustawień galerii}
\subsubsection{Realizacja zamówienia}


\subsection{Obsługa klienta}
\subsubsection{Wyszukiwanie imprez}
\subsubsection{Zamawianie zdjęć}
\subsubsection{Kontrola stanu zamówienia}


\subsection{Obsługa administratora}
\subsubsection{Akceptacja pakietu}
\subsubsection{Blokowanie i usuwanie kont użytkowników}
\subsubsection{Zarządzanie pakietami miejsca na dysku serwera}
\subsubsection{Tworzenie kopii zapasowych serwisu}
\subsubsection{Powrót do poprzedniego stanu serwisu}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Przegląd aktorów}
\begin{description}
	\item[Klient] - osoba posiadająca konto w systemie i pragnąca zamówić odbitki zdjęć
	\item[Fotograf] - autor zdjęć udostępnionych klientom do zamówienia
	\item[Administrator] - osoba dbająca o porządek w serwisie, odpowiedzialna za zarządzanie sprzedażą pakietów i
				przestrzeganie zasad w systemie
	\item[Gość] - osoba nieposiadająca konta w systemie
\end{description}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Na razie wykomentowane, trzeba zapytać na ćwiczeniach czy to pisać czy nie
% \section{Wymagania}
% \subsection{Wymagania funkcjonalne}
% 
% \subsection{Wymagania niefunkcjonalne}
% \subsubsection{Użyteczność}
% \subsubsection{Niezawodność}
% \subsubsection{Efektywność}
% \subsubsection{Odporność na wprowadzanie zmian}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section[Dokumentacja online i pomoc]{Dokumentacja użytkownika online oraz system pomocy}
Nie przewiduje się utworzenia osobnej dokumentacji użytkownika online. System będzie działał jako strona sieci Web,
a na każdej wymagającej tego podstronie (szczególnie przy każdym kroku zamawiania odbitek oraz obsługi galerii przez
fotografów) będzie dostępna pomoc kontekstowa szczegółowo opisująca co należy na danej podstronie (lub na danym kroku)
zrobić, aby proces zakończył się powodzeniem.

Oprócz pomocy kontekstowej razem z aplikacją zostanie uruchomiony system pomocy, który będzie pozwalał na indywidualne
udzielnie pomocy poprzez kontakt wirtualny (przy pomocy Internetu) za pomocą wiadomości e-mail bądź specjalnego panelu
pomocy.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Ograniczenia projektowe}
% na razie tego nie daję, bo chyba nie będziemy tego pisać (chyba, że znajdziemy coś, co by pasowało do tego działu)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Zakupione komponenty}
% Na potrzeby uruchomienia i działania systemu (a także jego utworzenia i przetestowania) zakupiony został specjalistyczny
% sprzęt komputerowy.
% TODO tu trzeba by napisać, że kupiliśmy dużo serwerów, bo będzie z naszego serwisu korzystać cała Polska (a po jego
% internacjonalizacji cały świat;) ) i innych potrzebnych rzeczy, ale nie umiem tego teraz ubrać ładnie w słowa

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Interfejsy}
% \subsection{Interfejs użytkownika}
% \subsection{Interfejsy sprzętowe}
% \subsection{Interfejsy programów}
% \subsection{Interfejsy komunikacyjne}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Wymagania licencyjne}
Kod aplikacji nie będzie dostępny publicznie ze względu na zaawansowane i nowatorskie rozwiązania jakie zostaną w nim
zaimplementowane. Po upływie określonego czasu (ustalanego wyłączną decyzją autorów) i sukcesie systemu, jego poszczególne
składowe będą poddane sprzedaży zainteresowanym firmom bądź indywidualnym programistom do wykorzystania w nienaruszonym
kształcie i z zachowaniem informacji o autorach kodu.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Uwagi związane z prawem autorskim i inne}
Zdjęcia umieszczane przez fotografów w galeriach muszą być ich własnością. W przypadku wykrycia przez administratorów portalu
wykorzystania przez fotografa zdjęć, do których nie posiada praw autorskich, jego konto będzie natychmiast usuwane a sprawa
przekazywana wraz z potrzebnymi dowodami odpowiednim organom ścigania. Portal nie będzie tolerował naruszania praw autorskich
tak fotografów, jak autorów kodu.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Stosowane standardy}
Aplikacja ma być stroną internetową, jej kod będzie tworzony przy użyciu języków \verb+PHP+, \verb+Python+, \verb+XHTML+, \verb+CSS+.
Ma on być zgodny ze standardami definiowanymi przez organizację W3C: \verb+XHTML+ ma być zgodny ze standardem \verb+XHTML 1.0+,
a \verb+CSS+ ze standardem \verb+CSS 2.0+
% TODO jeśli jest jakiś standard do Pythona to można by go tu też napisać

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Słownik}
% TODO nie wiem, czu to potrzebny będzie słownik, jeśli sie coś znajdzie, to dodamy

\end{document}
